import Object.Constant;
import Object.GooglePic;
import Util.HttpUtil;
import Object.Pic;
import Object.MyRunnable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author jklu
 * Google爬虫的相关函数，与Baidu类似
 */
public class GoogleSpider {

    private ExecutorService executor;
    /**
     * 基于API，设置每一页的请求链接
     * 与Baidu和Bing不同，Google每一页固定返回100条图片数据，所以无需count参数
     * @param word  搜索关键字
     * @param page  页数，Google默认最大页数为8
     * @param start 页的起始地址
     * @param color 颜色筛选
     * @return      每一页的请求链接
     */
    private String setUrl(String word,int page,int start,String color){
        String result = Constant.API_GOOGLE;
        result = result.replace("{word}",word);
        result = result.replace("{page}",String.valueOf(page));
        result = result.replace("{start}",String.valueOf(start));
        result = result.replace("{color}",color);
        System.out.println(result);
        return result;
    }

    /**
     * 设置颜色筛选
     * @param color 自定义的颜色选项
     * @return      服务器接受的颜色选项
     */
    private String setColor(int color){
        String result = "";
        //颜色(0全部 2黑白 4透明 8红色 16橘色 32绿色 64青色 128蓝色 256紫色 512粉色 1024白色 2048灰色 4096黑色 8192棕色)
        switch (color){
            case  0:
                break;
            case 2:
                result = "ic=gray";
                break;
            case 4:
                result = "ic=trans";
                break;
            case 8:
                result = "ic=specific,isc=red";
                break;
            case 16:
                result = "ic=specific,isc=orange";
                break;
            case 32:
                result = "ic=specific,isc=green";
                break;
            case 64:
                result = "ic=specific,isc=teal";
                break;
            case 128:
                result = "ic=specific,isc=blue";
                break;
            case 256:
                result = "ic=specific,isc=purple";
                break;
            case 512:
                result = "ic=specific,isc=pink";
                break;
            case 1024:
                result = "ic=specific,isc=white";
                break;
            case 2048:
                result = "ic=specific,isc=gray";
                break;
            case 4096:
                result = "ic=specific,isc=black";
                break;
            case 8192:
                result = "ic=specific,isc=brown";
                break;
            default:
                System.out.println("Dont't have this mode !!");
                break;
        }
        return result;
    }

    /**
     * 用户使用
     * 下载一个GooglePic对象中所有Pic对象
     * @param pic   要下载的GooglePic对象
     * @param useProxy  是否需要使用代理，用户设置
     */
    protected void downloadAllPic(GooglePic pic,boolean useProxy){
        executor = Executors.newCachedThreadPool();
        for (Pic p:pic.getPicList()) {
            executor.execute(new MyRunnable(p,3,useProxy));
        }
    }

    /**
     * 用户使用
     * 获取一页数据的对象，即一个GooglePic对象
     * @param word  搜索关键字
     * @param page  当前页数
     * @param start 页的起始地址，用于图片序号的设置
     * @param color 自定义的颜色筛选
     * @return      一个GooglePic对象，包含一页中所有图片对象的集合
     */
    protected GooglePic getPicList(String word,int page,int start,int color){
        return new GooglePic(HttpUtil.getDocument(setUrl(word, page, start, setColor(color)),true),page);
    }
}
